class Solution {
public:
    int maxLen = 0;
    TreeNode* cur;
    void dfs(TreeNode* root,int depth){
      if(!root->left&&!root->right){
          if(depth > maxLen){
            maxLen = depth;
            cur = root;
          }
          return;
      }
      if(root->left) dfs(root->left,depth+1);
      if(root->right) dfs(root->right,depth+1);
      return;
    }
    int findBottomLeftValue(TreeNode* root) {
      // queue<TreeNode*> que;
      // if(root == NULL) return root->val;
      // que.push(root);
      // int num = 0;
      // while(!que.empty()){
      //   int size = que.size();
      //   TreeNode* cur = que.front();
      //   num = cur->val;
      //   for(int i = 0;i < size;i++){
      //     TreeNode* node = que.front();
      //     que.pop();
      //     if(node->left) que.push(node->left);
      //     if(node->right) que.push(node->right);
      //   }
      // }
      // return num;
        
        dfs(root,1);
        return cur->val;
      }
};
